package isg.etsii.ull.es.DAO;

import isg.etsii.ull.es.UsuarioRegistrado;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

public class UsuarioRegistradoDAO {
	Connection conn = null;
 
	public UsuarioRegistradoDAO() throws ClassNotFoundException, SQLException {
		Class.forName("org.postgresql.Driver"); 
		
		// Localhost
		/*
		String url = "jdbc:postgresql://localhost:5432";
		String usuario = "postgres";
		String clave = "buby";
		*/
		String url = "jdbc:postgresql://localhost:5432";
		String usuario = "postgres";
		String clave = "admin";
		
		// Para el cc
		/*
		String url = "jdbc:postgresql://banot.etsii.ull.es/isg0910e6";
		String usuario = "isg0910e6";
		String clave = "4PA9fC";
	*/	
		conn = DriverManager.getConnection(url, usuario, clave);
	}

	// Insertar un nuevo Usuario Registrado en la base de datos
	public int nuevo(UsuarioRegistrado ur) throws SQLException {
		String sql = "INSERT INTO USUARIOSREGISTRADOS (NOMBRE, DNI, USUARIO, CLAVE) VALUES (?,?,?,?)";
		
		PreparedStatement stm = conn.prepareStatement(sql);
		
		stm.setString(1, ur.getNombre());
		stm.setString(2, ur.getDNI());
		stm.setString(3, ur.getNUsuario());
		stm.setString(4, ur.getClave());
	    
		int i = 0;
		
		try {// poner en un try catch
			i = stm.executeUpdate();
		} catch (SQLException e) {
			System.out.println(i);
		}
		
			return i; // indica el numero de registros insertados
			
	}
 
	// Listar todos los usuarios de la base de datos
	public ArrayList<UsuarioRegistrado> listarTodos() throws SQLException {
		String sql = "SELECT * FROM USUARIOSREGISTRADOS";
		
		Statement stm = conn.createStatement();
		
		ResultSet rs = stm.executeQuery(sql);
		
		ArrayList<UsuarioRegistrado> listaUsuariosRegistrados = new ArrayList<UsuarioRegistrado>();
		
		while (rs.next()) {
			UsuarioRegistrado ur = new UsuarioRegistrado();
			
			ur.setNombre(rs.getString("NOMBRE"));
			ur.setDNI(rs.getString("DNI"));
			ur.setNUsuario(rs.getString("USUARIO"));
			ur.setClave(rs.getString("CLAVE"));
			
			listaUsuariosRegistrados.add(ur);
		}
	
		return listaUsuariosRegistrados;
	}
 
	// borrar un Usuario Registrado de la base de datos
	public int borrar(int dni) throws SQLException {
		String sql = "DELETE FROM USUARIOSREGISTRADOS WHERE ID = ?";
		
		PreparedStatement stm = conn.prepareStatement(sql);
		
		stm.setInt(1, dni);
		
		int i = stm.executeUpdate();
	
		return i;
	}
	
	public UsuarioRegistrado buscarUsuario(String usuario) throws SQLException {
        String sql = "SELECT * FROM USUARIOSREGISTRADOS WHERE USUARIO = ?";
		
        PreparedStatement stm = conn.prepareStatement(sql);
		
        stm.setString(1, usuario);
        
        ResultSet rs = stm.executeQuery();
		
		UsuarioRegistrado ur = new UsuarioRegistrado();
		
		while (rs.next()) {
			
			ur.setNombre(rs.getString("NOMBRE"));
			ur.setDNI(rs.getString("DNI"));
			ur.setNUsuario(rs.getString("USUARIO"));
			ur.setClave(rs.getString("CLAVE"));
			
		}
	
		return ur;
	}
	
	public UsuarioRegistrado perfil(String usuario) throws SQLException {
        String sql = "SELECT * FROM USUARIOSREGISTRADOS WHERE USUARIO = ?";
		
        PreparedStatement stm = conn.prepareStatement(sql);
		
        stm.setString(1, usuario);
        
        ResultSet rs = stm.executeQuery();
		
		UsuarioRegistrado ur = new UsuarioRegistrado();
		
		while (rs.next()) {
			
			ur.setNombre(rs.getString("NOMBRE"));
			ur.setDNI(rs.getString("DNI"));
			ur.setNUsuario(rs.getString("USUARIO"));
			ur.setClave(null);
			
		}
	
		return ur;
	}
	
	public int existe(String usuario) throws SQLException {
		int count = 0;
		
		String sql = "SELECT COUNT(*) FROM USUARIOSREGISTRADOS WHERE USUARIO = ?";
		PreparedStatement stm = conn.prepareStatement(sql);
		
		stm.setString(1, usuario);	
		
	    ResultSet rs = stm.executeQuery();
		
	    while (rs.next()) {
	    	count = rs.getInt(1);
	    }
		return count;
	}
	
	public int existeClave(String usuario, String clave) throws SQLException {
        int count = 0;
		
        String sql = "SELECT COUNT(*) FROM USUARIOSREGISTRADOS WHERE USUARIO = ? AND CLAVE = ?";
		
        PreparedStatement stm = conn.prepareStatement(sql);
        
        stm.setString(1, usuario);
        stm.setString(2, clave);
        
        ResultSet rs = stm.executeQuery();
		
	    while (rs.next()) {
	    	count = rs.getInt(1);
	    }
		
		return count;
	}
	
	public String devDNI(String usuario) throws SQLException {
        String dni = null;
		
        String sql = "SELECT DNI FROM USUARIOSREGISTRADOS WHERE USUARIO = ?";
		
        PreparedStatement stm = conn.prepareStatement(sql);
        
        stm.setString(1, usuario);
        
        ResultSet rs = stm.executeQuery();
        
        while (rs.next()) {
        	dni = rs.getString("DNI");
	    }
        
        
		return dni;
	}
 
	// modificar el pass de un Usuario Registrado de la base de datos
	public int actualizar(String usuario, String clave, String dni) throws SQLException {
		String sql = "UPDATE USUARIOSREGISTRADOS SET CLAVE = ? WHERE DNI = ?";
		
		PreparedStatement stm = conn.prepareStatement(sql);
		
		stm.setString(1, clave);
		stm.setString(2, dni);
		
		int i = stm.executeUpdate();
 
		return i;
	}
}
